package com.cb2.algorithm.leetcode;

/**
 * <a href='https://leetcode.com/problems/print-immutable-linked-list-in-reverse'>逆序打印不可变链表(Print Immutable Linked List in Reverse)</a>
 * <p>
 * 给您一个不可变的链表，使用下列接口逆序打印每个节点的值：
 *     <ul>
 *         <li><span style="background:#e0e0e0">ImmutableListNode</span>: 描述不可变链表的接口，链表的头节点已给出。</li>
 *     </ul>
 * </p>
 * <p>
 *     您需要使用以下函数来访问此链表（您 不能 直接访问 ImmutableListNode）：
 *      <ul>
 *          <li><span style="background:#e0e0e0">ImmutableListNode.printValue()</span>：打印当前节点的值。</li>
 *          <li><span style="background:#e0e0e0">ImmutableListNode.getNext()</span>：返回下一个节点。</li>
 *      </ul>
 * </p>
 * <p>输入只用来内部初始化链表。您不可以通过修改链表解决问题。也就是说，您只能通过上述 API 来操作链表。</p>
 *
 * <p>
 * <b>示例：</b>
 * <pre>
 *  示例 1：
 *      输入：head = [1,2,3,4]
 *      输出：[4,3,2,1]
 *
 *  示例 2：
 *      输入：head = [0,-4,-1,3,-5]
 *      输出：[-5,3,-1,-4,0]
 *
 *  示例 3：
 *      输入：head = [-2,0,6,4,4,-6]
 *      输出：[-6,4,4,6,0,-2]
 * </pre>
 * </p>
 *
 * <p>
 * <b>提示：</b>
 * <ul>
 *     <li>链表的长度在 [1, 1000] 之间。</li>
 *     <li>每个节点的值在 [-1000, 1000] 之间。</li>
 * </ul>
 * </p>
 *
 * @author c2b
 * @since 2025/5/16 9:35
 */
public class LC1265PrintImmutableLinkedListInReverse_M {
    /**
     * // This is the ImmutableListNode's API interface.
     * // You should not implement it, or speculate about its implementation.
     * interface ImmutableListNode {
     * public void printValue(); // print the value of this node.
     * public ImmutableListNode getNext(); // return the next node.
     * };
     */
    static class Solution {
        public void printLinkedListInReverse(ImmutableListNode head) {
            if (head != null) {
                printLinkedListInReverse(head.getNext());
                head.printValue();
            }
        }
    }

    interface ImmutableListNode {
        void printValue(); // print the value of this node.
        ImmutableListNode getNext(); // return the next node.
    }
}
